package net.zoneland.greenleaf.system.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import net.sf.json.JSONObject;
import net.zoneland.greenleaf.common.pagination.Pagination;
import net.zoneland.greenleaf.system.entity.Sys_menu;
import net.zoneland.greenleaf.system.entity.Sys_menu_permission;
import net.zoneland.greenleaf.system.service.Sys_menuServiceI;
import net.zoneland.greenleaf.system.service.Sys_menu_permissionServiceI;

/**
 * SYS_MENU_PERMISSION[系统导航权限配置表]表操作控制层（Controller|Action）

 * 类   名：Sys_menu_permissionController<br/>
 * 表   名：SYS_MENU_PERMISSIONCONTROLLER<br/>
 * 注   释：<br/>
 * 作   者：GREENLEAF<br/>
 * 单   位：浙江兰德纵横网络技术有限公司<br/>
 * 日   期：2014-09-03 20:36:56
**/
@Controller
@RequestMapping("sys_menu_permission")
public class Sys_menu_permissionController extends BaseController {
	/**
	 * 如果需要系统对此Controller的访问进行监控，记录服务访问的时间，耗时，那么请将monitor属性设置为“true”
	 */
	public boolean monitor = false; 
	public static Logger logger = Logger.getLogger(Sys_menu_permissionController.class);
	//获取类的名称
	private String clazzName = new Object() {
		public String getClassName() {
			String clazzName = this.getClass().getName();
			return clazzName.substring(0, clazzName.lastIndexOf('$'));
		}
	}.getClassName();
	
	/**
	 * sys_menu_permissionService
	 * @param sys_menu_permissionService
	**/
	@Autowired
	private Sys_menu_permissionServiceI sys_menu_permissionService;
	@Autowired
	private Sys_menuServiceI sys_menuService;

	/**
	 * 获取系统导航权限配置表列表
	 * 返回JSON格式数据
	 * 
	 * 如果不需要分页，您可以考虑将pagesize设置为足够大的数字，系统默认为20
	 * 
	 * @param String jsonstring
	**/
	@RequestMapping(value = "rss/getList")
	@ResponseBody
	public Object getList(String jsonstring) {

		String page = "1";
		Integer pagesize = 100, totalRecord=0;
		Map<String, Object> paramMap = null, map=new HashMap<String,Object>();
		try {
			JSONObject object = JSONObject.fromObject(jsonstring);
			paramMap = (Map) JSONObject.toBean(object, Map.class);
		} catch (Exception e) {
			map.put("result", "error");
			map.put("message", "参数列表初始化错误，可能不是合法的JSON数据格式！");
			return map;
		}
		if(paramMap!=null){
			if(paramMap.get("page")!=null){
				page = paramMap.get("page").toString();
			}
			if(paramMap.get("pagesize") != null){
				try{
					pagesize = Integer.parseInt(paramMap.get("pagesize").toString());
				}catch(Exception e){
					pagesize = 20;
				}
			}
			try{
				List list  = null;
				totalRecord=sys_menu_permissionService.getListCount(paramMap);
				Pagination pagination=Pagination.newPagination(pagesize, page, totalRecord);
				paramMap.put("startRow", pagination.getStartRow());
				paramMap.put("pageSize", pagesize );
				if( totalRecord>0 ){					
					list  = sys_menu_permissionService.getList(paramMap);
				} else {
					list = new ArrayList();
				}
				map.clear();
				map.put("result", "success");
				map.put("message", "系统导航权限配置表信息查询成功！");
				map.put("pagination", pagination);
				map.put("list", list);
			}catch(Exception e){
				map.put("result", "error");
				map.put("message", "系统导航权限配置表信息数据查询出错，请联系管理员！");
			}
		} else{
			map.put("result", "error");
			map.put("message", "参数列表为空，无法进行数据查询！");
		}
		
		return map;
}
	/**
	 * 批量增加菜单权限关联信息
	 * 返回JSON格式数据
	 * @param String jsonstring
	**/
	@RequestMapping(value = "batchAdd")
	@ResponseBody
	public Object addOrUpdate(String menu_id,String ids,Integer inherit_state ){
		Map<String, Object>map=new HashMap<String, Object>();
		Sys_menu_permission sys_menu_permission = null;
		try{
			sys_menu_permissionService.batchAdd(menu_id, ids);
			if(inherit_state!=null&&inherit_state.intValue()==1){   //权限需要继承到所有子菜单
				List<Sys_menu>menulist=null;
				map.put("id", menu_id);
				menulist=sys_menuService.getAllChildMenu(map);
				if(menulist!=null&&menulist.size()>0){
					for(Sys_menu menu:menulist){
						sys_menu_permissionService.batchAdd(menu.getId(), ids);
					}
				}
			}
			map.clear();
			map.put("result", "success");
			map.put("message", "成功保存系统菜单权限关联信息！");
		}catch(Exception e){
			map.clear();
			map.put("result", "error");
			map.put("message", "保存系统菜单权限关联信息失败!");
			map.put("exception", "");
			logger.error("保存系统菜单权限关联信息失败", e);
		}
		return map;
	}
	/**
	 * 增加或编辑一个系统导航权限配置表信息
	 * 返回JSON格式数据
	 * @param String jsonstring
	**/
	@RequestMapping(value = "addOrUpdate")
	@ResponseBody
	public Object addOrUpdate(String jsonstring ){

		logger.debug("addOrUpdate方法接收到传入的参数：jsonstring="+jsonstring );
		Map<String, Object>map=new HashMap<String, Object>();
		Sys_menu_permission sys_menu_permission = null;
		try {
			logger.debug("addOrUpdate方法将收到的参数传换为具体对象...");
			JSONObject object=JSONObject.fromObject(jsonstring);
			sys_menu_permission = ( Sys_menu_permission )JSONObject.toBean(object, Sys_menu_permission.class);
		} catch (Exception e) {
			logger.debug("addOrUpdate方法将收到的参数传换为具体对象失败。");
			map.put("result", "error");
			map.put("message", "参数列表初始化错误，可能不是合法的JSON数据格式！");
			return map;
		}
		try{
			logger.debug("addOrUpdate方法新增或者更新信息记录..." );
			sys_menu_permissionService.addOrUpdate( sys_menu_permission );
			logger.debug("addOrUpdate方法新增或者更新数据成功。");
			map.put("result", "success");
			map.put("message", "成功保存系统导航权限配置表信息！");
			map.put("exception", "");
		}catch(Exception e){
			logger.debug("addOrUpdate方法新增或者更新数据失败。");
			map.put("result", "error");
			map.put("message", "保存系统导航权限配置表信息失败!");
			map.put("exception", "");
			logger.error("保存系统导航权限配置表信息失败", e);
		}
		return map;
	}
	/**
	 * 根据ID删除一个系统导航权限配置表信息
	 * 返回JSON格式数据
	 * @param int id
	**/
	@RequestMapping(value = "deleteById")
	@ResponseBody
	public Object deleteById(String id){
		logger.debug("deleteById方法接收到传入的参数：id="+id);
		Map<String, Object> map = new HashMap<String, Object>();
		try {
			map.put("id", id);
			logger.debug("deleteById方法根据条件删除多条数据...");
			sys_menu_permissionService.delete(map);
			logger.debug("deleteById方法删除数据成功");
			map.clear();
			map.put("result", "success");
			map.put("message", "成功删除一个系统导航权限配置表信息！");
			map.put("exception", "");
		} catch (Exception e) {
			map.clear();
			map.put("result", "error");
			map.put("message", "删除系统导航权限配置表信息失败!");
			map.put("exception", "");
			logger.error("删除系统导航权限配置表信息失败", e);
		}
		return map;
	}
	/**
	 * 根据ID删除多个系统导航权限配置表信息
	 * 返回JSON格式数据
	 * @param String ids
	**/
	@RequestMapping(value = "deleteByIds")
	@ResponseBody
	public Object deleteByIds(String ids){
		logger.debug("deleteByIds方法接收到传入的参数：ids="+ids);
		Map<String, Object> map = new HashMap<String, Object>();
		try {
			map.put("ids", ids.split(","));
			logger.debug("deleteByIds方法根据条件删除多条数据...");
			sys_menu_permissionService.delete(map);
			logger.debug("deleteByIds方法删除数据成功");
			map.clear();
			map.put("result", "success");
			map.put("message", "成功删除系统导航权限配置表信息！");
			map.put("exception", "");
		} catch (Exception e) {
			map.clear();
			map.put("result", "error");
			map.put("message", "删除系统导航权限配置表信息失败!");
			map.put("exception", "");
			logger.error("删除系统导航权限配置表信息失败", e);
		}
		return map;
	}
}
